Thực đơn
Ext4 Phân bổ trễ và mất dữ liệu tiềm năngDo phân trễ làm thay đổi hành vi mà các lập trình viên đã dựa vào ext3, tính năng này gây ra một số rủi ro mất dữ liệu bổ sung trong trường hợp hệ thống gặp sự cố hoặc mất điện trước khi tất cả dữ liệu được ghi vào đĩa. Do đó, ext4 trong các phiên bản kernel 2.6.30 trở lên sẽ tự động xử lý các trường hợp này như ext3.
Kịch bản điển hình trong đó điều này có thể xảy ra là một chương trình thay thế nội dung của file mà không buộc ghi vào đĩa bằng fsync. Có hai cách phổ biến để thay thế nội dung của file trên các hệ thống Unix:[20]
fd=open("file", O_TRUNC); write(fd, data); close(fd);
O_TRUNC
), sau đó dữ liệu mới được ghi ra. Vì việc ghi có thể mất một thời gian, có thể mất cơ hội ngay cả với ext3, nhưng thường rất nhỏ. Tuy nhiên, vì ext4 có thể trì hoãn việc ghi dữ liệu file trong một thời gian dài, cơ hội này lớn hơn nhiều.Có một số vấn đề có thể phát sinh: fd=open("file.new"); write(fd, data); close(fd); rename("file.new", "file");
rename()
được đảm bảo là nguyên tử theo tiêu chuẩn POSIX - tức là file cũ vẫn còn hoặc bị ghi đè bằng file mới. Vì chế độ ghi nhật ký "được đặt hàng" mặc định của ext3 đảm bảo dữ liệu file được ghi trên đĩa trước siêu dữ liệu, kỹ thuật này đảm bảo rằng nội dung file cũ hoặc mới sẽ tồn tại trên đĩa. Phân bổ trễ của ext4 phá vỡ kỳ vọng này, vì việc ghi file có thể bị trễ trong một thời gian dài và việc đổi tên thường được thực hiện trước khi nội dung file mới đến đĩa.Sử dụng fsync()
thường xuyên hơn để giảm rủi ro cho ext4 có thể dẫn đến các hình phạt về hiệu năng đối với các hệ thống file ext3 được gắn cờ data=ordered
(mặc định trên hầu hết các bản phân phối Linux). Cho rằng cả hai hệ thống file sẽ được sử dụng trong một thời gian, điều này làm phức tạp vấn đề cho các nhà phát triển ứng dụng người dùng cuối. Đáp lại, ext4 trong nhân Linux 2.6.30 và mới hơn phát hiện sự xuất hiện của các trường hợp phổ biến này và buộc các file phải được phân bổ ngay lập tức. Với một phí tổn nhỏ trong hiệu suất, điều này cung cấp ngữ nghĩa tương tự như chế độ được đặt hàng ext3 và tăng khả năng một trong hai phiên bản của file sẽ sống sót sau sự cố. Hành vi mới này được kích hoạt theo mặc định, nhưng có thể bị vô hiệu hóa với tùy chọn gắn kết "noauto_da_alloc".[20]
Các bản vá mới đã trở thành một phần của kernel dòng chính 2.6.30, nhưng các bản phân phối khác nhau đã chọn backport chúng thành 2.6.28 hoặc 2.6.29.[21]
Các bản vá này hoàn toàn không ngăn chặn mất dữ liệu tiềm năng hoặc trợ giúp với các file mới. Cách duy nhất để an toàn là viết và sử dụng phần mềm thực hiện fsync()
khi cần. Các vấn đề về hiệu năng có thể được giảm thiểu bằng cách hạn chế ghi đĩa quan trọng cần fsync()
xảy ra ít thường xuyên hơn.[22]
Thực đơn
Ext4 Phân bổ trễ và mất dữ liệu tiềm năngLiên quan
Tài liệu tham khảo
WikiPedia: Ext4 http://www.ext2fsd.com/ http://www.h-online.com/open/features/Kernel-Log-H... http://www.h-online.com/open/news/item/Android-2-3... http://www.ibm.com/developerworks/linux/library/l-... http://www.paragon-software.com/home/extfs-mac/ http://www.paragon-software.com/home/extfs-windows... http://www.soluvas.com/read-browse-explore-open-ex... http://www.ubuntugeek.com/how-to-read-ext3ext4-lin... http://www.cs.wisc.edu/wind/Publications/iron-sosp... http://ext2read.sourceforge.net/